/*
Simple Forum Auto Poster.
Copyright (C) 2011 Gianni Van Hoecke.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package domain.threading;

import domain.DomainController;
import domain.settings.Settings;
import java.util.logging.Level;
import persistence.OpenBrowser;
import persistence.net.Client;

/**
 *
 * @author Gianni Van Hoecke <gianni.vh@gmail.com>
 *
 * Class that checks for updates.
 */
public class UpdateChecker extends Thread
{
    @Override
    public void run()
    {
        try
        {
            DomainController.getInstance().getUi().setButtonsEnabled(false);
            DomainController.getInstance().getUi().setStatusIndeterminate(true, "Checking...");

            Client client = new Client();
            client.doGet(Settings.UPDATE_URL);

            String newVersion = client.getResponseContent();
           
            DomainController.getInstance().getUi().setButtonsEnabled(true);
            DomainController.getInstance().getUi().setStatusIndeterminate(false, "Done.");

            String message = "";
            
            if(!Settings.VERSION.equals(newVersion))
            {
                //New version!
                message = "A new version of " + Settings.APP_NAME_SHORT + " is available!";

                DomainController.getInstance().getLogger().log(Level.INFO, message);

                message += Settings.LINE_SEPARATOR + "Do you want to go to the download page?";
                
                if(DomainController.getInstance().getUi().fireYesNoQuestion(message, "Check for updates"))
                {
                    //Go to website.
                    OpenBrowser.openURL(Settings.PROJECT_URL);
                }
            }
            else
            {
                //Up-to-date!
                message = Settings.APP_NAME_SHORT + " is up-to-date!";
                DomainController.getInstance().getLogger().log(Level.INFO, message);
                DomainController.getInstance().fireMessage(message, "Check for updates");
            }
        }
        catch(Exception e)
        {
            DomainController.getInstance().getLogger().log(Level.SEVERE, e.getMessage());
        }
        finally
        {
            DomainController.getInstance().getUi().setButtonsEnabled(true);
            DomainController.getInstance().getUi().setStatusIndeterminate(false, "Done.");
        }
    }
}